/*
 * Các hàm helper cho việc xử lý danh sách hiển thị
 */
// Nhận lại tất cả các phần tử chỉ ra bởi tên class
function getElementsByClass(search) {
    var classElements = new Array();
    var els = document.getElementsByTagName('*');
    var pattern = new RegExp('(^|\\s)' + search + '(\\s|$)');

    for (var i = 0, j = 0; i < els.length; i++) {
        if (pattern.test(els[i].className)) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}
// Đánh đáu một hàng selected
function selectTableRow(data, e) {
    unselectTableRow();
    e.type = e.className;	// mượn thuộc tính type để lưu lại tên class cho phần tử
    e.className = 'selectedRow';	// thiết lập tên cho class
    window.filename = data;	// lưu trữ tên file selected như một thuộc tính của đố tượng window
}
// Loại bỏ hàng đã selected
function unselectTableRow() {
    for (i = 0, s = getElementsByClass('selectedRow'); i < s.length; i++) {
        s[i].className = s[i].type;	// trả lại tên class trước đó cho phần tử
    }
    hideForms();
}
// highlight a table row on mouseover
function highlightTableRow(e) {
    if (e.className != 'selectedRow') {
        e.style.backgroundColor = '#C3C3FE';
    }
}
// remove the highlighting on mouseout
function unhighlightTableRow(e) {
    e.style.backgroundColor = '';
}
// Đăng ký sự kiện và thiết lập các thông số cần thiết ban đầu
window.onload = function() {
    window.directory = '/';  // current directory viewed
    window.filename = '';    // currently selected file

    // event handlers
    document.getElementById('btn_open').onclick = openSelected;

    document.getElementById('btn_new_folder').onclick = showNewFolder;
    document.getElementById('form_new_submit').onclick = doNewFolder;
    document.getElementById('form_new_reset').onclick = hideForms;

    document.getElementById('btn_upload').onclick = showUploadFile;
    document.getElementById('form_upload').target = 'my_iframe';
    document.getElementById('form_upload_submit').onclick = doUploadFile;
    document.getElementById('form_upload_reset').onclick = hideForms;

    document.getElementById('btn_rename').onclick = showRename;
    document.getElementById('form_rename_submit').onclick = doRename;
    document.getElementById('form_rename_reset').onclick = hideForms;

    document.getElementById('btn_delete').onclick = doDelete;
	
	document.getElementById('insert_image').onclick = doInsert;

    // nhận lại danh sách các file hoặc thư mục
    refreshFilesList();
}
function doInsert() {
	//var url = 'http://phetbook.com/media/'+x+window.directory+'/'+window.filename;
	var userId = document.getElementById('user_id').value;
	var url = location.protocol+"//"+location.host+'/rukanhitokiri/img/base/upload/'+userId+window.directory+window.filename;
	window.opener.epicEditor.insertImage(url);
    self.close();
}
// nhận lại danh sách các file hoặc thư mục
function refreshFilesList() {
    hideForms();
    var url = 'process.php?action=list&dir=' + window.directory + '&nocache=' + (new Date()).getTime();
    window.httpObj = createXMLHTTPObject();
    window.httpObj.open('GET', url , true);
    window.httpObj.onreadystatechange = function() {
        if (window.httpObj.readyState == 4 && window.httpObj.responseText) {
            document.getElementById('file_datagrid').innerHTML = window.httpObj.responseText;
            window.filename = '';
        }
    }
    window.httpObj.send(null);
}
// Ẩn tất cả các form nhập dữ liệu
function hideForms() {
    document.getElementById('form_new').style.display = 'none';
    document.getElementById('form_rename').style.display = 'none';
    document.getElementById('form_upload').style.display = 'none';
}
// Thông báo người dùng khi upload thất bại
function uploadFailed() {
    alert('Có lỗi xảy ra khi tải file.');
    hideForms();
}
// Hiển thị form để upload môt file mới 
function showUploadFile() {
    hideForms();
    document.getElementById('form_upload').reset();
    document.getElementById('form_upload').style.display = '';
}
// Thiết lập đường dẫn thư mục cho form_upload_directory
function doUploadFile() {
    document.getElementById('form_upload_directory').value = window.directory;
}
// hiển thị form cho việc tạo thư mục mới
function showNewFolder() {
    hideForms();
    document.getElementById('form_new_name').value = '';
    document.getElementById('form_new').style.display = '';
}
// Tạo một thư mục mới
function doNewFolder() {
    var url = 'process.php?action=new&dir=' + window.directory + '&name=' 
	        + document.getElementById('form_new_name').value + '&nocache=' + (new Date()).getTime();

    window.httpObj = createXMLHTTPObject();
    window.httpObj.open('GET', url , true);
    window.httpObj.onreadystatechange = function() {
        if (window.httpObj.readyState == 4 && window.httpObj.responseText) {
            if (window.httpObj.responseText == 'OK') {
                refreshFilesList();
            } else {
                alert('Không thể tạo mới thư mục.');
            }
        }
    }
    window.httpObj.send(null);
    return false;	// Ngăn cản trình duyệt submit form và load lai trang web.
}
// Hiển thị form cho việc đổi tên file hay thư mục
function showRename() {
    // don't rename a parent directory or if no file is selected
    if (window.filename == '..' || window.filename == '') {
        return;
    }
    hideForms();
    document.getElementById('form_rename_name').value = window.filename;
    document.getElementById('form_rename').style.display = '';
}
// Đổi tên file hay thư mục
function doRename() {
    var url = 'process.php?action=rename&dir=' + window.directory + '&oldfile=' + window.filename + '&newfile=' 
	        + document.getElementById('form_rename_name').value + '&nocache=' + (new Date()).getTime();

    window.httpObj = createXMLHTTPObject();
    window.httpObj.open('GET', url , true);
    window.httpObj.onreadystatechange = function() {
        if (window.httpObj.readyState == 4 && window.httpObj.responseText) {
            if (window.httpObj.responseText == 'OK') {
                refreshFilesList();
            } else {
                alert('Không thể đổi tên thư mục.');
            }
        }
    }
    window.httpObj.send(null);
    return false;
}
// Xóa file hay thư mục
function doDelete() {
    // don't delete a parent directory or if no file is selected
    if (window.filename == '..' || window.filename == '') {
        return;
    }
    if (!confirm('Bạn có chắc muốn xóa thư mục?')) {
        return;
    }
    var url = 'process.php?action=delete&dir=' + window.directory + '&file=' + window.filename + '&nocache=' + (new Date()).getTime();

    window.httpObj = createXMLHTTPObject();
    window.httpObj.open('GET', url , true);
    window.httpObj.onreadystatechange = function() {
        if (window.httpObj.readyState == 4 && window.httpObj.responseText) {
            if (window.httpObj.responseText == 'OK') {
                refreshFilesList();
            } else {
                alert('Không thể xóa thư mục.');
            }
        }
    }
    httpObj.send(null);
}
// Tải về tập tin đã chọn hoặc vào trong thư mục được chọn
function openSelected() {
    var url = 'process.php?action=open&dir=' + window.directory + '&file=' + window.filename + '&nocache=' + (new Date()).getTime();

    window.httpObj = createXMLHTTPObject();
    window.httpObj.open('GET', url , true);
    window.httpObj.onreadystatechange = function() {
        if (window.httpObj.readyState == 4 && window.httpObj.responseText) {
            var result = eval('(' + window.httpObj.responseText + ')');
			
			// debug hiển thị đối tượng
//			var str = '';
//			for(var prop in result) {
//				str += prop + " :"+ result[prop]+"\n";
//			}
//			alert(str);return false;
  
            if (result.retType == 'directory') {
                window.directory = result.directory;
                refreshFilesList();
            } else if (result.retType == 'file') {
                window.location = 'download.php?&dir=' + window.directory + '&file=' + window.filename + '&nocache=' + (new Date()).getTime();
            } else {
                alert('Có lỗi xảy ra.');
            }
        }
    }
    window.httpObj.send(null);
    return false;
}